﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Modelo;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using Microsoft.Win32;
using System.IO;

namespace Interface
{
    /// <summary>
    /// Interaction logic for RealizarVenta.xaml
    /// </summary>
    public partial class RealizarVenta : UserControl
    {
        List<Venta> ventas;
        Sucursal sucursal;
        Cliente cliente;
        public RealizarVenta(Sucursal sucursal)
        {
            InitializeComponent();

            label8.Content = DateTime.Now.ToString();
            ventas = new List<Venta>();
            this.sucursal = sucursal;
            label14.Content = sucursal.telefono.ToString();
            label16.Content = sucursal.direccion;
            label18.Content = sucursal.idSucursal.ToString();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            label6.Content = "";
            Venta venta=null;
            bool entrar = false;
            try
            {
                int venta2=Proceso.GestorVenta.verificarCodigo(ventas,textBox1.Text);

                entrar = venta2 == -1;
                if (entrar)
                {
                    venta = Proceso.GestorVenta.anadirProducto(textBox1.Text, textBox2.Text);
                    ventas.Add(venta);
                }
                else
                {
                    ventas[venta2] = Proceso.GestorVenta.anadirProducto(textBox1.Text, textBox2.Text);
                }
                Productos.ItemsSource = ventas;
            }
            catch (Exception ex)
            {
                label6.Content = ex.Message;
                if (venta != null)
                {
                    //Productos = new DataGrid();
        
                    ventas.Remove(venta);
                  
                    Productos.ItemsSource = ventas;
                    
                }
            }
            Productos.Items.Refresh();
        
        }
        public float montoTotal()
        {
            float cant = 0;
            foreach (Venta venta in ventas)
                cant += float.Parse(venta.Total);
            return cant;
        }
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            MessageBoxResult result = MessageBox.Show("Desea validar esta venta de "+montoTotal()+" ?", "Esta seguro", MessageBoxButton.YesNo);
            try
            {
                if(result==MessageBoxResult.Yes)
                Proceso.GestorVenta.AlmacenarVenta(ventas,textBox4.Text,"2345",label8.Content.ToString(),sucursal.idSucursal.ToString(),textBox3.Text,textBox7.Text);
                this.Content = new RealizarVenta(sucursal);
            }
            catch (Exception ex)
            {
                label6.Content = ex.Message;
            }
        }

        private void Productos_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {

            if (Productos.SelectedIndex > -1)
            {
                MessageBoxResult result = MessageBox.Show("Desea Eliminar " + ventas[Productos.SelectedIndex].IdProducto + "?", "Eliminar", MessageBoxButton.YesNo);
                if (result == MessageBoxResult.Yes)
                {
                    ventas.RemoveAt(Productos.SelectedIndex);
                    Productos.Items.Refresh();
                }
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog o = new OpenFileDialog();
            if (o.ShowDialog()==true)
            {
                byte[] bytes = File.ReadAllBytes(o.FileName);
                ArrayList code = new ArrayList();
                int iScan = 100;
                TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
                try
                {
                    Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(bytes);
                
                BarcodeImaging.FullScanPage(ref code, bitmap1, iScan);
                string message = "";
                if (code.Count > 0)
                {
                    foreach (var op in code)
                    {
                        message += op.ToString();
                    }
                    textBox1.Text = message;
                }
                else
                    message = "No hay codigo de barras";
                MessageBox.Show(message);
                    }
                catch (ArgumentException)
                {
                    MessageBox.Show("Elija formato de imagen");
                }
            }
        }

        private void button4_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                cliente = Proceso.GestorCliente.ObtenerClientePorCI(textBox4.Text);
                textBox3.Text = cliente.Apellido;
                textBox5.Text = cliente.Direccion;
                if(cliente.Telefono>-1)
                textBox6.Text = cliente.Telefono.ToString();
            }
            catch (Exception)
            { 
            }
        }
    }
}
